﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Marmat.Foundation
{
    /// <summary>
    /// 监听记录变化的通知。
    /// </summary>
    public interface IDocumentViewFormNotification
    {

        /// <summary>
        /// 记录变化后的消息通知。
        /// </summary>
        /// <param name="id">记录的id</param>
        /// <param name="status">记录的变化状态的类型。</param>
        /// <param name="tag">其他附带的数据。</param>
        void Notification(object id, DocumentStatusChangeEnum status, object tag);
    }

    /// <summary>
    /// 监听记录变化的通知。
    /// </summary>
    public interface IDocumentViewFormNotification<T>
    {

        /// <summary>
        /// 记录变化后的消息通知。
        /// </summary>
        /// <param name="item">变更的对象实例。</param>
        /// <param name="status">记录的变化状态的类型。</param>
        /// <param name="tag">其他附带的数据。</param>
        void Notification(T item, DocumentStatusChangeEnum status, object tag);
    }

    /// <summary>
    /// 记录状态变化的类型枚举。
    /// </summary>
    public enum DocumentStatusChangeEnum
    {
        /// <summary>
        /// 记录被新增。
        /// </summary>
        Insert = 1,

        /// <summary>
        /// 记录被更新。
        /// </summary>
        Update = 2,

        /// <summary>
        /// 记录被删除。
        /// </summary>
        Delete = 4,

        /// <summary>
        /// 不明确的状态，通常由开发人员调用。
        /// </summary>
        Undefined = 8,
    }
}
